#ifndef OLED_DISPLAY_H
#define OLED_DISPLAY_H

#include "display.h"

#include <esp_lcd_panel_io.h>
#include <esp_lcd_panel_ops.h>

/**
 * @brief OLED显示器类，继承自Display基类
 * 
 * 用于管理和控制OLED显示屏的显示内容和UI布局
 */
class OledDisplay : public Display {
private:
    esp_lcd_panel_io_handle_t panel_io_ = nullptr;  // OLED面板IO句柄
    esp_lcd_panel_handle_t panel_ = nullptr;        // OLED面板操作句柄

    lv_obj_t* status_bar_ = nullptr;    // 状态栏UI对象
    lv_obj_t* content_ = nullptr;       // 主内容区UI对象
    lv_obj_t* content_left_ = nullptr;  // 左侧内容区UI对象
    lv_obj_t* content_right_ = nullptr; // 右侧内容区UI对象
    lv_obj_t* container_ = nullptr;     // 容器UI对象
    lv_obj_t* side_bar_ = nullptr;      // 侧边栏UI对象

    DisplayFonts fonts_;                // 显示字体配置

    /**
     * @brief 获取显示锁，确保UI操作的线程安全
     * @param timeout_ms 超时时间(毫秒)，0表示永不超时
     * @return 是否成功获取锁
     */
    virtual bool Lock(int timeout_ms = 0) override;
    
    /**
     * @brief 释放显示锁
     */
    virtual void Unlock() override;

    /**
     * @brief 设置128x64分辨率OLED屏幕的UI布局
     */
    void SetupUI_128x64();
    
    /**
     * @brief 设置128x32分辨率OLED屏幕的UI布局
     */
    void SetupUI_128x32();

public:
    /**
     * @brief 构造函数
     * @param panel_io OLED面板IO句柄
     * @param panel OLED面板操作句柄
     * @param width 屏幕宽度
     * @param height 屏幕高度
     * @param mirror_x 是否水平镜像
     * @param mirror_y 是否垂直镜像
     * @param fonts 显示字体配置
     */
    OledDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, bool mirror_x, bool mirror_y,
                DisplayFonts fonts);
    
    /**
     * @brief 析构函数，释放资源
     */
    ~OledDisplay();

    /**
     * @brief 设置聊天消息内容
     * @param role 消息角色(用户/助手/系统)
     * @param content 消息内容
     */
    virtual void SetChatMessage(const char* role, const char* content) override;
};

#endif // OLED_DISPLAY_H
